package cn.edu.zafu.bigdata.LiJuan;

interface Movable {
    // 抽象方法，表示物体移动
    void move();

    // 抽象方法，表示物体停止移动
    void stop();
}

interface Resizable {
    // 抽象方法，表示物体根据因子进行缩放
    void resize(double factor);
}

// Car 类实现 Movable 接口
class CarTwo implements Movable {
    // 在 move() 方法中打印 "The car is moving."
    @Override
    public void move() {
        System.out.println("The car is moving.");
    }

    // 在 stop() 方法中打印 "The car has stopped."
    @Override
    public void stop() {
        System.out.println("The car has stopped.");
    }
}

// ResizableCircle 类实现 Movable 和 Resizable 两个接口
class ResizableCircle implements Movable, Resizable {
    // 属性 radius（半径）
    private double radius;

    // 构造函数
    public ResizableCircle(double radius) {
        this.radius = radius;
    }

    // 在 move() 方法中打印 "The circle is moving."
    @Override
    public void move() {
        System.out.println("The circle is moving.");
    }

    // 在 stop() 方法中打印 "The circle has stopped."
    @Override
    public void stop() {
        System.out.println("The circle has stopped.");
    }

    // 在 resize() 方法中根据缩放因子修改半径，并打印缩放后的半径
    @Override
    public void resize(double factor) {
        radius *= factor;
        System.out.println("The circle's new radius is: " + radius);
    }
}

public class TestInterface {
    public static void main(String[] args) {
        // 创建 Car 和 ResizableCircle 的实例
        Movable car = new CarTwo();
        Movable circle = new ResizableCircle(5);

        // 验证每个类对接口方法的实现
        car.move();
        car.stop();
        circle.move();
        circle.stop();

        // 仅对 ResizableCircle 调用 resize() 方法
        Resizable resizableCircle = (Resizable) circle;
        resizableCircle.resize(2);
    }
}